/*******************************************************************************
 * Classe Personnage : classe de création des personnages du jeu
 ******************************************************************************/
package ElementsDeJeu;

import java.awt.*;
import javax.swing.*;
import prjintwg.Fenetre;

/**
 *
 * @author W&G
 */
public class Personnage extends JComponent {

    private Fenetre f;//Fenetre du programme
    private int numJoueur = 0;//numéro du joueur
    private int posX = 0;//position en x du personnage
    private int posY = 0;//position en y du personnage/
    private int pv = 1000;//points de vie du personnage
    private int points = 0;//points de marqués par le joueur
    private double force = 1;//force du personnage
    private int etat = 0;//Etat actuel du personnage
/**
 * Constructeur de personnage
 * @param f fenetre du jeu
 * @param numJoueur numéro du joueur correspondant
 * @param posX position en x du personnage
 * @param posY position en y du personnage
 */
    public Personnage(Fenetre f, int numJoueur, int posX, int posY) {
        this.f = f;
        this.numJoueur = numJoueur;
        this.posX = posX;
        this.posY = posY;
    }
/**
 * Retourne l'état du personnage
 * @return retourne l'état du personnage
 */
    public int getEtat() {
        return etat;
    }
    
/**
 * Redéfinit l'etat du personnage
 * @param etat etat à assigner au personnage
 */
    public void setEtat(int etat) {
        this.etat = etat;
    }
/**
 * Redéfinit la force du personnage
 * @param force force à assigner au personnage
 */
    public void setForce(double force) {
        this.force = force;
    }
/**
 * Retourne la force du personnage
 * @return retourne la force du personnage
 */
    public double getForce() {
        return this.force;
    }
/**
 * Définit la position du personnage
 * @param posX position a assigner en x
 * @param posY position a assigner en y
 */
    public void setPosition(int posX, int posY) {
        this.posX = posX;
        this.posY = posY;
    }
/**
 * Définit la position du personnage selon son déplacement
 * @param deplacement déplacement effectué par le personnage
 */
    public void setPosition2(int deplacement) {
        this.posX += deplacement;
        this.posY = f.getPnlJeu().getMonDecor().getTerrainY(this.posX / 2) + 36;
    }
/**
 * Retourne les points de vie du personnge
 * @return retourne les points de vit du personnage
 */
    public int getPv() {
        return pv;
    }
/**
 * Inflige des dommages au personnage touché
 * @param dommages dommages à infliger au personnage
 */
    public void EstTouche(int dommages) {
        pv -= dommages;
    }
/**
 * Définit les pv du personnage
 * @param pv points de vie a assigner
 */
    public void setPv(int pv){
        this.pv = pv;
    }
/**
 * Ajoute des points au score
 * @param points points à ajouter
 */
    public void Atouche(int points) {
        this.points += points;
    }
/**
 * Définit les points du personnage
 * @param points points a assigner
 */
    public void setPoints(int points){
    this.points = points;
    }
/**
 * Retourne les points du personnage
 * @return retourne les points du personnage
 */
    public int getPoints() {
        return points;
    }
/**
 * Retourne la position en x du personnage
 * @return retourne la position en x du personnage
 */
    public int getPosX() {
        return posX;
    }
/**
 * Retourne la position en y du personnage
 * @return retourne la position en y du personnage
 */
    public int getPosY() {
        return posY;
    }

    @Override
    public void paintComponent(Graphics g) {//Dessine le personnage
        if (numJoueur == 1) {
            g.setColor(Color.red);
        } else if (numJoueur == 2) {
            g.setColor(Color.blue);
        }
        //Tete
        g.fillOval(posX - 16, f.getHeight() - posY, 16, 16);
        //Corps
        g.drawLine(posX - 8, f.getHeight() - posY + 16, posX - 8, f.getHeight() - posY + 25);
        //Bras
        g.drawLine(posX - 16, f.getHeight() - posY + 20, posX, f.getHeight() - posY + 20);
        //Jambe droite
        g.drawLine(posX - 8, f.getHeight() - posY + 25, posX, f.getHeight() - posY + 25 + 10);
        //Jambe gauche
        g.drawLine(posX - 8, f.getHeight() - posY + 25, posX - 16, f.getHeight() - posY + 25 + 10);
        g.setColor(Color.GRAY);
        if (numJoueur == 1) {
            //bandeau
            g.fillRect(posX - 20, f.getHeight() - posY + 3, 20, 2);
            //Oeil
            g.fillOval(posX - 16 + 11, f.getHeight() - posY + 5, 4, 4);
            //Bouche
            g.fillRect(posX - 5, f.getHeight() - posY + 12, 4, 1);
        } else if (numJoueur == 2) {
            //bandeau
            g.fillRect(posX - 14, f.getHeight() - posY + 3, 19, 2);
            //Oeil
            g.fillOval(posX - 16 + 2, f.getHeight() - posY + 5, 4, 4);
            //Bouche
            g.fillRect(posX - 16 + 2, f.getHeight() - posY + 12, 4, 1);
        }
        if (etat == 1) {
            g.setColor(Color.yellow);
            Polygon poly = new Polygon();
            poly.addPoint(posX - 19, f.getHeight() - posY + 4);//point gauche
            poly.addPoint(posX - 15, f.getHeight() - posY - 4);//2e point gauche
            poly.addPoint(posX - 12, f.getHeight() - posY - 2);//premier creux gauche
            poly.addPoint(posX - 7, f.getHeight() - posY - 10);//point sommet
            poly.addPoint(posX - 3, f.getHeight() - posY - 2);//premier creux droite
            poly.addPoint(posX + 1, f.getHeight() - posY - 4);//2e point droit
            poly.addPoint(posX + 3, f.getHeight() - posY + 4);//point droit

            g.fillPolygon(poly);
        }
    }
}
